/*
  封装请求函数 request
*/

// https://gmall-prod.atguigu.cn/mall-api/index/findCategory1
// https://gmall-prod.atguigu.cn/mall-api/index/findBanner

const baseUrl = "https://gmall-prod.atguigu.cn/mall-api";

function request(url, data = "", method = "GET") {
  wx.showLoading({
    title: "数据加载中...",
  });

  return new Promise((resolve, reject) => {
    const header = {};
    const token = wx.getStorageSync("token");
    if (token) {
      header.token = token;
    }

    wx.request({
      url: baseUrl + url,
      method,
      data,
      header,
      // 只要服务器返回了响应，不管响应成功还是失败，都会进入success回调
      success(res) {
        /*
          res 是一个对象 
            data: 响应数据
            header: 响应头
            statusCode: 响应状态码
            errMsg: "request:ok"
            cookies: []
        */
        // console.log("success", res);
        if (res.statusCode >= 200 && res.statusCode < 300) {
          // 请求成功 200
          if (res.data.code === 200) {
            // 功能成功: 将Promise改成成功状态，并返回成功的数据
            resolve(res.data.data);

            wx.hideLoading(); // 隐藏loading
          } else {
            // 功能失败: 将Promise改成失败状态，并返回失败的原因
            reject("请求失败请重试");

            wx.showToast({
              title: "请求失败请重试", // 用了icon，title长度最多7个
              icon: "error",
            });
          }
        } else {
          // 请求失败 404 500
          // 功能失败: 将Promise改成失败状态，并返回失败的原因
          reject("请求失败请重试");

          wx.showToast({
            title: "请求失败请重试",
            icon: "error",
          });
        }
      },
      // 服务器没有返回响应，才会进入fail回调
      fail(err) {
        // console.log("err", err);
        reject("请求失败请重试");

        wx.showToast({
          title: "请求失败请重试",
          icon: "error",
        });
      },
    });
  });
}

export default request;
